"""
KNN(K-近邻算法)
    概述：
        专业：找离测试集最近的哪K个样本，然后投票。哪个标签值多，就用它作为测试集的最终结果

    KNN算法实现思路：
        思路1：分类思路    投票，选票数最多的
        思路2：回归思路    求平均值

    KNN(K-近邻算法) : 分类(多数表决)
        1.计算未知样本到每一个训练样本的距离
        2.将训练样本根据距离大小升序排列
        3.取出距离最近的 K 个训练样本
        4.进行多数表决，统计 K 个样本中哪个类别的样本个数最多
        5.将未知的样本归属到出现次数最多的类别

"""
'''
开发步骤：
1.获取数据
2.数据处理
3.特征工程
    特征提取
    特征预处理
    特征筛选
    特征降维
    特征组合
4.获取/创建模型（KNN）
5.模型训练
6.模型测试/预测
'''

# 导包
from sklearn.neighbors import KNeighborsClassifier  # 分类
# 数据准备
# 2. 4行3列（2列特征，1列标签）
'''
索引  特征1 特征2  标签     欧式距离
 0    1     4    1        √17 
 1    2     0    1        √18 
 2    3     1    0        √8
 3    4     2    0        √2
      5     3    ？（预测）
索引排序（按照距离升序）3 2 0 1 
'''

# 1.导包
from sklearn.neighbors import KNeighborsClassifier
# 2.获取数据
x_train = [[1,4],[2,0],[3,1],[4,2]] #训练集  4行2列
y_train = [1,1,0,0]

# 3.创建模型
model = KNeighborsClassifier(n_neighbors=3)

# 4.模型训练
# es = model.fit(x_train, y_train)
model.fit(x_train, y_train)

# 5.模型预测
x_test = [[5,3]]
y_predict = model.predict(x_test)
print(f'预测结果为：{y_predict}')
# 打印欧式距离和索引排序结果
a,b = model.kneighbors(x_test)
print(a,b)
print('**'*10)
print(model.kneighbors(x_test))